/*
 * @lc app=leetcode.cn id=70 lang=javascript
 *
 * [70] 爬楼梯
 */

// @lc code=start
/**
 * @param {number} n
 * @return {number}
 */
var climbStairs = function(n) {
    if (n === 0 || n === 1 || n === 2) {
        return n
    }
    let index1 = 1
    let index2 = 2
    let temp
    for (let index = 0; index <= n - 3; index++) {
        temp = (index1 + index2)
        index1 = index2
        index2 = temp
    }
    return temp
};
// @lc code=end

// /* 
//     青蛙一次可以跳一个台阶或者两个台阶，那么它跳到第十级台阶有几种方法，第n级呢
//     f(n) = f(n - 1) + f(n - 2)
//     模1000000007的目的是为了防止大数越界
// */

// /**
//  * @param {number} n
//  * @return {number}
//  */
//  var numWays = function(n) {
//     let fMap = new Map()
//     fMap.set(0,1)
//     fMap.set(1,1)
//     fMap.set(2,2)
//     for (let index = 3; index <= n; index++) {
//         fMap.set(index, (fMap.get(index - 1) + fMap.get(index - 2)) % 1000000007)
//     }
//     return fMap.get(n)
// };

// /* 
//     备忘录法
//     保留每一步
// */

// /**
//  * @param {number} n
//  * @return {number}
//  */
//  var numWays = function(n) {
//     let a = 0, b = 1, temp = 1
//     for ( let index = 0; index < n  ; index++ ) {
//         temp = (a + b) % 1000000007
//         a = b
//         b = temp
//     }
//     return temp
// };

// /* 
//     动态规划
//     保留最优值并放入下一区域中计算
// */

